"""
创建一个类
1. 定义初始化方法
    1.1 获取配置文件的路径
    1.2 实例化configparser类
    1.3 读取指定路径下的配置文件信息

2. 定义一个对外方法,获取某个section下面所有option
"""
import os
from configparser import ConfigParser


# 创建一个类
class ConFig:
# 1. 定义初始化方法
    def __init__(self):
        # 1.1 获取配置文件的路径
        self.path = os.path.dirname(os.path.dirname(__file__)) + r"/config.ini"
        # 1.2 实例化configparser类
        self.con = ConfigParser()
        # 1.3 读取指定路径下的配置文件信息
        self.con.read(self.path, encoding="utf-8")
        # (了解) 获取所有的section的值
        print(f"所有section的值:{self.con.sections()}")

    # # 2. 定义一个对外方法,获取某个section下面所有option的键值对
    # def get_all_options(self, s):
    #     return self.con.items(s)
    #
    # # 3. 定义一个对外方法,获取某个section下面所有option的值
    # def get_one_options(self,s,o):
    #     return self.con.get(s,o)
    # # 4.定义一个对外的方法:get_config:默认参数实现
    # def get_config(self, s, o="all"):
    #     """
    #     如果调用者只传递了一个参数进来:section, 则返回这个section下面所有option键值对
    #     如果调用者传递了2个参数进来:section,option, 则返回这个section下指定option的值
    #     :param s: section名字
    #     :param o: option名字
    #     :return: 查询出来的值
    #     """
    #     if o == "all":
    #         return self.con.items(s)
    #     else:
    #         return self.con.get(s, o)



    # 5.定义一个对外的方法: get_config:不定长参数
    def get_config(self, *args):
        """
        如果调用者只传递了一个参数进来:section, 则返回这个section下面所有option键值对
        如果调用者传递了2个参数进来:section,option, 则返回这个section下指定option的值
        :param s: section名字
        :param o: option名字
        :return: 查询出来的值
        """
        if len(args) == 1:
            return self.con.items(*args)
        elif len(args) == 2:
            return self.con.get(*args)
        else:
            print("参数个数错误")

if __name__ == '__main__':
    cp = ConFig()
    # print(cp.get_all_options("redis"))
    # print(cp.get_one_option("redis", "port"))
    print(cp.get_config("redis"))
    print(cp.get_config("redis", "port"))
    print(cp.get_config("redis", "port"))

